home *** CD-ROM | disk | FTP | other *** search
/ LOGIC Apps / Logic-APPLE_II_APPS.iso / pc / LOGIC Apple II 5.25" Library - DOS Part 2 / DOS031.dsk / MAGIC SQUARES AND CUBES.bas < prev    next >
BASIC Source File  |  2012-02-16  |  3KB  |  105 lines

  1. 0  LIST 25900
  2. 1  FOR X = 1 TO 2000: NEXT X
  3. 10  REM ************************
  4. 20  REM 
  5. 30  REM  MAGIC SQUARES AND CUBES
  6. 40  REM 
  7. 50  REM    BY STUART ANSTIS
  8. 60  REM 
  9. 70  REM        1979
  10. 80  REM 
  11. 90  REM ************************
  12. 92  PRINT "DO YOU WANT A 2-D MAGIC SQUARE OR A 3-D MAGIC CUBE?"
  13. 94  INPUT "TYPE 2 FOR A SQUARE, 3 FOR A CUBE.....";D$
  14. 95 D =  VAL(D$)
  15. 96  IF D < >2  AND D < >3  THEN  GOTO 94
  16. 98  IF D >2  THEN  GOTO 116
  17. 100  PRINT "WHAT SIZE MAGIC SQUARE? ";
  18. 110  INPUT "TYPE A PRIME NUMBER GREATER THAN 3.....";N
  19. 112  IF 2 *(N/2 - INT(N/2)) <0.1  THEN  GOTO 110
  20. 114  GOTO 125
  21. 116  PRINT "WHAT SIZE MAGIC CUBE? ";
  22. 118  INPUT "TYPE A PRIME NUMBER EQUAL TO OR GREATER THAN 11.....";N
  23. 120  IF 2 *(N/2 - INT(N/2)) <0.1  THEN  GOTO 118
  24. 125 J = 0
  25. 128  PRINT : PRINT : PRINT 
  26. 130  DIM V(N)
  27. 140  DIM S(N,N),T(N,N),U(N,N)
  28. 150  DIM ROW(N),COL(N)
  29. 155  DIM J(N,N)
  30. 160  REM  *************************
  31. 170  REM 
  32. 180  REM       FIRST ROW
  33. 190  REM  INSERT DIGITS FROM 1 TO
  34. 200  REM   N IN RANDOM ORDER
  35. 210  REM 
  36. 220  REM  *************************
  37. 300  FOR C = 1 TO N
  38. 310 V(C) =  INT(N * RND(1))
  39. 320  FOR K = 1 TO C -1
  40. 330  IF V(C) = V(C -K)  THEN  GOTO 310
  41. 340  NEXT K
  42. 350 U(1,C) = V(C)
  43. 360  NEXT C
  44. 400  REM  ********************
  45. 410  REM    SHIFT DIGITS 2 PLACES
  46. 420  REM  TO RIGHT IN SUCCESSIVE
  47. 430  REM         ROWS
  48. 440  REM     L=(C-2) MOD N  
  49. 450  REM  ********************
  50. 500  FOR R = 2 TO N
  51. 510  FOR C = 1 TO N
  52. 520 L = N *((C -3)/N - INT((C -3)/N)) +1
  53. 530 U(R,C) = U(R -1,L)
  54. 540  NEXT C
  55. 550  NEXT R
  56. 600  REM  ********************
  57. 610  REM  SHIFT DIGITS 4 PLACES
  58. 620  REM  TO RIGHT IN SUCCESSIVE
  59. 630  REM       PLANES
  60. 635  REM  J=(C-4*P) MOD N
  61. 640  REM  ********************
  62. 700  FOR P = 1 TO N ^(D -2)
  63. 710  FOR R = 1 TO N
  64. 720  FOR C = 1 TO N
  65. 730 J = N *((C -4 *P)/N - INT((C -4 *P)/N)) +1
  66. 732 J =  INT(J +0.5)
  67. 740 S(R,C) =  INT(U(R,J))
  68. 745  NEXT C: NEXT R
  69. 750  REM  ********************
  70. 760  REM  U(R,C) FLIPPED LEFT/RIGHT
  71. 770  REM  AND UP/DOWN;
  72. 780  REM  T(R,C)=N*(L/R MIRROR IMAGE) +
  73. 790  REM        N*N*(U/D MIRROR IMAGE)
  74. 795  REM  ********************
  75. 797  FOR R = 1 TO N: FOR C = 1 TO N
  76. 800 T(R,C) = S(R,C) +N *S(R,N -C +1) +N *N *S(N -R +1,C) *(D -2)
  77. 810 SS =  INT(T(R,C)) +1
  78. 820 ROW(R) = ROW(R) +SS
  79. 830 COL(C) = COL(C) +SS
  80. 840  REM  FORMATTING STATEMENT *****
  81. 850 T = 5 - LOG(SS +1)/ LOG(10)
  82. 855  REM :PRINT THE MAGIC SQUARE *****
  83. 860  PRINT  SPC( T);SS;
  84. 865 T(R,C) = 0
  85. 866 SS = 0
  86. 870  NEXT C
  87. 880  REM  PRINT SUMS OF ROWS *****
  88. 900  PRINT "  ***  ";ROW(R)
  89. 910 ROW(R) = 0
  90. 920  PRINT 
  91. 930  NEXT R
  92. 1000  REM : PRINT SUMS OF COLUMNS *****
  93. 1010  FOR C = 1 TO N
  94. 1020  PRINT "*****";
  95. 1030  NEXT C
  96. 1040  PRINT 
  97. 1050  FOR C = 1 TO N
  98. 1060 T = 5 - LOG(COL(C))/ LOG(10)
  99. 1070  PRINT  SPC( T);COL(C);
  100. 1080  NEXT C
  101. 1090  FOR C = 1 TO N:COL(C) = 0: NEXT C
  102. 1100  PRINT : PRINT : PRINT 
  103. 1200  NEXT P
  104. 2000  END 
  105. 25900  REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H>           <CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H>FROM:  APPLE-CAN<CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J><CTRL-J>